-/*
- Copyright (C) 2024 Rubén Beltrán del Río
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see https://map.tranquil.systems.
- */
+// Copyright (C) 2024 Rubén Beltrán del Río
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see https://map.tranquil.systems.
import Cocoa
import SwiftUI
scrollView.translatesAutoresizingMaskIntoConstraints = false
- textView.backgroundColor = .ui.background
+ textView.backgroundColor = .UI.background
textView.allowsUndo = true
textView.delegate = self
textView.textStorage?.delegate = self
textStorage.removeAttribute(
.backgroundColor, range: NSRange(location: 0, length: textStorage.length))
- for range in highlightRanges {
+ for (index, range) in highlightRanges.enumerated() {
let nsRange = NSRange(range, in: textStorage.string)
- textStorage.addAttribute(.backgroundColor, value: NSColor.syntax.match, range: nsRange)
+ let color = index == selectedRange ? NSColor.Syntax.highlightMatch : NSColor.Syntax.match
+ textStorage.addAttribute(.backgroundColor, value: color, range: nsRange)
}
textView.needsDisplay = true
let range = highlightRanges[selectedRange]
let nsRange = NSRange(range, in: textStorage.string)
textView.scrollRangeToVisible(nsRange)
- textView.selectedRange = nsRange
}
}
}
}
-
- private func setSelectionColor() {
- guard let textView = self.textView else { return }
-
- var selectedTextAttributes = textView.selectedTextAttributes
- selectedTextAttributes[.backgroundColor] = NSColor.yellow.withAlphaComponent(0.3)
- textView.selectedTextAttributes = selectedTextAttributes
- }
}
extension MapTextEditorController: NSTextViewDelegate {
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.vertex], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.vertex], range: match.range(at: 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.number], range: match.range(at: 2))
+ [.foregroundColor: NSColor.Syntax.number], range: match.range(at: 2))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.number], range: match.range(at: 3))
+ [.foregroundColor: NSColor.Syntax.number], range: match.range(at: 3))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.option], range: match.range(at: 4))
+ [.foregroundColor: NSColor.Syntax.option], range: match.range(at: 4))
}
matches = edgeRegex.matches(in: textStorage.string, options: [], range: range)
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.vertex], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.vertex], range: match.range(at: 1))
let arrowRange = match.range(at: 2)
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.symbol],
+ [.foregroundColor: NSColor.Syntax.symbol],
range: NSMakeRange(arrowRange.lowerBound - 1, arrowRange.length + 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.vertex], range: match.range(at: 3))
+ [.foregroundColor: NSColor.Syntax.vertex], range: match.range(at: 3))
}
matches = opportunityRegex.matches(in: textStorage.string, options: [], range: range)
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.option], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.option], range: match.range(at: 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.vertex], range: match.range(at: 2))
+ [.foregroundColor: NSColor.Syntax.vertex], range: match.range(at: 2))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.symbol], range: match.range(at: 3))
+ [.foregroundColor: NSColor.Syntax.symbol], range: match.range(at: 3))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.number], range: match.range(at: 4))
+ [.foregroundColor: NSColor.Syntax.number], range: match.range(at: 4))
}
matches = blockerRegex.matches(in: textStorage.string, options: [], range: range)
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.option], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.option], range: match.range(at: 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.vertex], range: match.range(at: 2))
+ [.foregroundColor: NSColor.Syntax.vertex], range: match.range(at: 2))
}
matches = noteRegex.matches(in: textStorage.string, options: [], range: range)
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.option], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.option], range: match.range(at: 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.number], range: match.range(at: 2))
+ [.foregroundColor: NSColor.Syntax.number], range: match.range(at: 2))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.number], range: match.range(at: 3))
+ [.foregroundColor: NSColor.Syntax.number], range: match.range(at: 3))
}
matches = stageRegex.matches(in: textStorage.string, options: [], range: range)
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.option], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.option], range: match.range(at: 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.number], range: match.range(at: 2))
+ [.foregroundColor: NSColor.Syntax.number], range: match.range(at: 2))
}
matches = groupRegex.matches(in: textStorage.string, options: [], range: range)
for match in matches {
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.option], range: match.range(at: 1))
+ [.foregroundColor: NSColor.Syntax.option], range: match.range(at: 1))
textStorage.addAttributes(
- [.foregroundColor: NSColor.syntax.vertex], range: match.range(at: 2))
+ [.foregroundColor: NSColor.Syntax.vertex], range: match.range(at: 2))
}
}
}
context: NSViewControllerRepresentableContext<MapTextEditor>
) {
nsViewController.highlightRanges = highlightRanges
- nsViewController.selectedRange = selectedRange
+ if nsViewController.selectedRange != selectedRange {
+ nsViewController.selectedRange = selectedRange
+ }
}
}